/* cl.ext.moment 0.1*/
(
	function (factory) {
		if (typeof define === 'function' && define.amd) {
			define(['jquery',"moment","MomentLang"], function($,momentjs) {
				factory($,momentjs);
			});
		} else if (typeof module === 'object' && module.exports) {
			var momentjs = require('moment');
			var momentLangjs = require('MomentLang');
			module.exports = function( root, jQuery ) {
				if ( jQuery === undefined ) {
					if ( typeof window !== 'undefined' ) {
						jQuery = require('jquery');
					}
					else {
						jQuery = require('jquery')(root);
					}
				}
				factory(jQuery,momentjs);
			};
		} else {
			factory(jQuery, moment);
		}
	}(
	function ($,moment){
		var defaults={value:"",format:"YYYY-MM-DD"};
		var $modalCommon={
			getDefaults :function () {
				return defaults
			},
			getOptions : function (options) {
				options=$.ExtCommon.isCheckEmpty(options)?{}:options;
				var optionBase =$.ExtCommon.initMergeJson(this.getDefaults(),options);
				optionBase.isloading=options.infoLoad && typeof options.infoLoad == "object";
				return optionBase
			}
		};
		var MomentExtModal = function() {

		};
		MomentExtModal.prototype = {
			initMoment:moment,
			initFormat: function (options) {
				var optionBase=$modalCommon.getOptions(options);
				if (typeof options == "string") {
					if($.ExtCommon.isCheckNum(options)) {
						optionBase.value = new Date(parseInt(options))
					}else{
						optionBase.value = options;
					}
				} else {
				}
				var strTime = "";
				var valueType=$.type(optionBase.value);
				if($.type(optionBase.value)=="date"){
					strTime = moment(optionBase.value).format(optionBase.format);
				}else if(valueType=="object"){
					strTime =optionBase.value.format(optionBase.format);
				}else{
					if (optionBase.value.length == 0) {
						strTime = moment().format(optionBase.format);
					} else {
						optionBase.value = optionBase.value.replace(/[/]/g, '-');
						strTime = moment(optionBase.value).format(optionBase.format);
					}
				}
				return strTime=="Invalid date"?"":strTime;
			},
			initAdd: function (num, type) {
				var momentDefault=defaults.format;
				if($.ExtCommon.isCheckEmpty(num) && $.ExtCommon.isCheckEmpty(type)){
					return moment().format(momentDefault);
				}else{
					type=$.ExtCommon.isCheckEmpty(type)?"day":type;
					return moment().add(num, type).format(momentDefault);
				}
			},
			initAddByData: function (time,num, type) {
				var momentDefault=defaults.format;
				if($.ExtCommon.isCheckEmpty(num) && $.ExtCommon.isCheckEmpty(type)){
					return moment(time).format(momentDefault);
				}else{
					type=$.ExtCommon.isCheckEmpty(type)?"day":type;
					return moment(time).add(num, type).format(momentDefault);
				}
			},
			initSubtract:function(num, type){
				type=$.ExtCommon.isCheckEmpty(type)?"days":type;
				return moment().subtract(num, type)
			},
			timeDiff:function(s,e,type){
				s=$.ExtCommon.isCheckEmpty(s)?new Date():s;
				e=$.ExtCommon.isCheckEmpty(e)?new Date():e;
				if($.ExtCommon.isCheckEmpty(type)){
					return moment(e).diff(moment(s))
				}else{
					return moment(e).diff(moment(s),type);
				}
			},
			timeRatio:function(s,e1,e2){
				e2=$.ExtCommon.isCheckEmpty(e2)?new Date():e2;
				var a= this.timeDiff(s,e2);
				var b= this.timeDiff(s,e1);
				return $.ExtCommon.getValueRatio(a,b);
			}
		};
		$.ExtMoment = new MomentExtModal;
		$.ExtMoment.Constructor = MomentExtModal;
	})
);